/**
 * @file biblio.h
 * @brief Header file con macro di utilità generale per il progetto Biblio
 * @author: "Marco Luisi"
 *
 * Si dichiara che il contenuto di questo file e' in ogni sua parte opera originale dell' autore.
 */

#ifndef BIBLIO_H_
#define BIBLIO_H_

#include <errno.h>
#include <stdlib.h>

/** @name Stringhe per il protocollo di comunicazione tra client e server
 *  Utilizzate dal client per impostare il messaggio per le biblioteche, e dal server per parsare i messaggi.
 */
/**@{*/
#define _AUTORE "autore"
#define _TITOLO "titolo"
#define _EDITORE "editore"
#define _LUOGO_PUBBLICAZIONE "luogo_pubblicazione"
#define _ANNO "anno"
#define _COLLOCAZIONE "collocazione"
#define _DESCRIZIONE_FISICA "descrizione_fisica"
#define _NOTA "nota"
#define _PRESTITO "prestito"
#define MESSAGE_FIELDS {_AUTORE, _TITOLO, _EDITORE, _LUOGO_PUBBLICAZIONE,	_ANNO, _COLLOCAZIONE, _DESCRIZIONE_FISICA, _NOTA, _PRESTITO}
/**@}*/


/** @name Macro per l'allocazione di memoria e controllo errore
 *
 */
/**@{*/
#define MALLOC(p,s) p = malloc(s); if (p == NULL) {errno = ENOMEM; return(NULL);} else {;}
#define MALLOC_M1(p,s) p = malloc(s); if (p == NULL) {errno = ENOMEM; return(-1);} else {;}
/**@}*/

/** @name Macro di controllo parametri iniziali delle funzioni
 *
 */
/**@{*/
#define NULL_PARAM(p) if (p == NULL) {errno = EINVAL; return(NULL);} else {;}
#define NULL_PAR_M1(p) if (p == NULL) {errno = EINVAL; return(-1);} else {;}
/**@}*/

/** @name Macro per la gestione degli errori
 *  Nomenclatura: EC_(valore controllato)_(valore restituito)
 */
/**@{*/
#define EC_M1(s) if ((s) == -1) {return(-1);}
#define EC_NULL_M1(s) if((s) == NULL) {return(-1);}
/**@}*/

#define ERROR -1
#define OK 0

#endif /* BIBLIO_H_ */
